package environment;
import be.kuleuven.cs.som.annotate.*;

/**
 * Enumeratie die de mogelijke richtingen van begrenzing van een vakje opsomt.
 * 	NORTH, EAST, SOUTH en WEST zijn de vier windrichtingen van het 2-dimensionale vlak.
 *  CEILING en FLOOR zijn respectievelijk boven en beneden.
 */
public enum Direction {
	NORTH('N'), EAST('E'), SOUTH('S'), WEST('W'), CEILING('C'), FLOOR('F');
		
	/**
	 * Initialiseer deze richting van begrenzing met gegeven symbool.
	 *
	 * @param 	symbol
	 * 			Het symbool voor de nieuwe richting van begrenzing.
	 * @post 	Het symbool van deze nieuwe richting van begrenzing 
	 * 			is gelijk aan het gegeven symbool.
	 * 			| new.getSymbol() == symbol
	 */
	@Raw
	private Direction(char symbol) {
		this.symbol = symbol;
	}
		
	/**
	 * @return	Retourneer het symbool voor deze richting van begrenzing.
	 */
	@Basic @Raw @Immutable
	public char getSymbol() {
		return this.symbol;
	}
		
	/**
	 * Variabele die het symbool voor deze richting van begrenzing bijhoudt.
	 */
	private final char symbol;

	/**
	 * Retourneert het complement van deze richting van begrenzing.
	 */
	@Basic @Raw
	public Direction complement() {
		if(this == Direction.NORTH)
			return Direction.SOUTH;
		if(this == Direction.EAST)
			return Direction.WEST;
		if(this == Direction.SOUTH)
			return Direction.NORTH;
		if(this == Direction.WEST)
			return Direction.EAST;
		if(this == Direction.CEILING)
			return Direction.FLOOR;
		if(this == Direction.FLOOR)
			return Direction.CEILING;
		return null;
	}
}